home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2004 #2 / Amiga Plus CD - 2004 - No. 02.iso / AmigaPlus / Tools / Development / AmigaTalk / user / Vector3D.st < prev    next >
Text File  |  2004-01-31  |  3KB  |  153 lines

  1. " -------------------------------------------------------------- "
  2. " Vector3D.st - Implementation of Vectors of 3-dimensions.       "
  3. " -------------------------------------------------------------- "
  4.  
  5. Class Vector3D :VectorN ! v1 v2 v3 !
  6. [
  7.   new
  8.     v1 <- Float new: 0.0. 
  9.     v2 <- Float new: 0.0.
  10.     v3 <- Float new: 0.0.
  11.  
  12.     ^ self 
  13. |
  14.   norm
  15.     ^ (((v1 * v1) + (v2 * v2) + (v3 * v3)) sqrt)
  16. |
  17.   scale: aNumber
  18.     v1 <- v1 * aNumber.
  19.     v2 <- v2 * aNumber.
  20.     v3 <- v3 * aNumber.
  21.  
  22.     ^ self
  23. |
  24.   printString
  25.     ('<',  v1 asString, ', ', v2 asString, ', ', v3 asString, '>') print
  26. |
  27.   dot: nv
  28.     ^ ((v1 * nv v1) + (v2 * nv v2) + (v3 * nv v3))
  29. |
  30.   v1
  31.    ^ v1 
  32. |
  33.   v2
  34.    ^ v2 
  35. |
  36.   v3
  37.    ^ v3 
  38. |
  39.   v1: newV1
  40.    ^ v1 <- newV1
  41. |
  42.   v2: newV2
  43.    ^ v2 <- newV2
  44. |
  45.   v3: newV3
  46.    ^ v3 <- newV3
  47. |
  48.   cross: nv
  49.    v1 <- ((v2 * nv v3) - (v3 * nv v2)).
  50.    v2 <- ((v3 * nv v1) - (v1 * nv v3)).
  51.    v3 <- ((v1 * nv v2) - (v2 * nv v1)).
  52.  
  53.    ^ self
  54. |
  55.   boxProduct: b ! t !
  56.     t <- Vector3D new.
  57.     
  58.     t <- self cross: b.
  59.  
  60.     ^ (self dot: t)
  61. |
  62.   vectorProduct: b ! t !
  63.     t <- Vector3D new.
  64.     
  65.     t <- self cross: b.
  66.  
  67.     ^ (self cross: t)
  68. |
  69.   - b
  70.     (b isKindOf: Vector3D)
  71.       if False: [ ('Argument wrong class for - Vector3D') print.
  72.                   ^ nil
  73.                 ].
  74.                 
  75.     v1 <- (v1 - (b v1)).
  76.     v2 <- (v2 - (b v2)).
  77.     v3 <- (v3 - (b v3)).
  78.  
  79.     ^ self
  80. |
  81.   + b
  82.     (b isKindOf: Vector3D)
  83.       if False: [ ('Argument wrong class for + Vector3D') print.
  84.                   ^ nil
  85.                 ].
  86.                 
  87.     v1 <- (v1 + (b v1)).
  88.     v2 <- (v2 + (b v2)).
  89.     v3 <- (v3 + (b v3)).
  90.  
  91.     ^ self
  92. |
  93.   < b
  94.     (b isKindOf: Vector3D)
  95.       if False: [ ('Argument wrong class for < Vector3D') print.
  96.                   ^ nil
  97.                 ].
  98.                 
  99.     ((self norm) < (b norm))
  100.       ifTrue:  [^ true ]
  101.       ifFalse: [^ false]
  102. |
  103.   > b
  104.     (b isKindOf: Vector3D)
  105.       if False: [ ('Argument wrong class for > Vector3D') print.
  106.                   ^ nil
  107.                 ].
  108.                 
  109.     ((self norm) > (b norm))
  110.       ifTrue:  [^ true ]
  111.       ifFalse: [^ false]
  112. |
  113.   <= b
  114.     (b isKindOf: Vector3D)
  115.       if False: [ ('Argument wrong class for <= Vector3D') print.
  116.                   ^ nil
  117.                 ].
  118.                 
  119.     ((self norm) <= (b norm))
  120.       ifTrue:  [^ true ]
  121.       ifFalse: [^ false]
  122. |
  123.   >= b
  124.     (b isKindOf: Vector3D)
  125.       if False: [ ('Argument wrong class for >= Vector3D') print.
  126.                   ^ nil
  127.                 ].
  128.                 
  129.     ((self norm) >= (b norm))
  130.       ifTrue:  [^ true ]
  131.       ifFalse: [^ false]
  132. |
  133.   = b
  134.     (b isKindOf: Vector3D)
  135.       if False: [ ('Argument wrong class for = Vector3D') print.
  136.                   ^ nil
  137.                 ].
  138.                 
  139.     ((self norm) = (b norm))
  140.       ifTrue:  [^ true ]
  141.       ifFalse: [^ false]
  142. |
  143.   ~= b
  144.     (b isKindOf: Vector3D)
  145.       if False: [ ('Argument wrong class for ~= Vector3D') print.
  146.                   ^ nil
  147.                 ].
  148.                 
  149.     ((self norm) ~= (b norm))
  150.       ifTrue:  [^ true ]
  151.       ifFalse: [^ false]
  152. ]
  153.